/**
 * classe que contindrà totes les funcionalitats dels objectes Contenidor,
 * estableix la connexió amb la classe DAO per obtenir/enviar els objectes
 * de tipus Contenidor
 * @author Emili Antoni Moreno
 */
package edu.uoc.tfc.exuoc.controladors;

import edu.uoc.tfc.exuoc.config.Config;
import edu.uoc.tfc.exuoc.utils.seguretat.InjeccioCodi;
import edu.uoc.tfc.exuoc.model.InterfaceItem;
import edu.uoc.tfc.exuoc.model.Contenidor;


import java.util.Iterator;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import org.hibernate.HibernateException;

import edu.uoc.tfc.exuoc.errors.AfegirDAOException;
import edu.uoc.tfc.exuoc.errors.LlegirDAOException;
import edu.uoc.tfc.exuoc.errors.ModDAOException;
import edu.uoc.tfc.exuoc.errors.EliDAOException;
import edu.uoc.tfc.exuoc.errors.LlistatDAOException;
import edu.uoc.tfc.exuoc.errors.BuitException;
import edu.uoc.tfc.exuoc.errors.LogicException;

import edu.uoc.tfc.exuoc.utils.Eines;



public class GestorContenidors implements InterfaceGestor {
    private static Integer numContenidors=Config.valorNullInt;
    //Emili:30-12-2011: private ContenidorsDAO dao= new ContenidorsDAO();
    //Emili:30-12-2011: private GestorLogs  log=GestorLogs .getLogger(this.getClass().getName());
    private ContenidorsDAO dao;
    private GestorLogs  log;


    private static GestorContenidors INSTANCE = null;
    private GestorContenidors(){
        dao= new ContenidorsDAO();
        log=GestorLogs .getLogger(this.getClass().getName());

    };


    // creador sincronizado para protegerse de posibles problemas  multi-hilo
    // otra prueba para evitar instantiación múltiple
    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GestorContenidors();
        }

    }
    public static GestorContenidors getInstance() {
        if (INSTANCE == null) createInstance();
            return INSTANCE;
    }


    @Override
    public void openGestor(){
        if (dao ==null) dao= new ContenidorsDAO();
       
    }

    // Mètode que tancarà la sessió oberta un cop ja no calgui
    @Override
    public void  tancar() {
        try{
            if (dao!=null) dao.tancarConnexio();
            dao=null;

        }catch(NullPointerException e){
            getLog().error("GC:tancar:Valors nulls pel tancament."
                    +e.getLocalizedMessage());
        }catch(HibernateException e){
            getLog().error("GC:tancar:Error tancant la base de dades."
                    +e.getLocalizedMessage());
        }

    }


      @Override
    public GestorLogs  getLog() {
        return log;
    }

    @Override
    public void setLog(GestorLogs  log) {
        this.log = log;
    }

    public void evict(Object o){
        dao.evict(o);
    }
    public void persist(Object o){
        dao.persist(o);
    }

    public Long afegir(Contenidor nou)  throws AfegirDAOException {
        Long falla=Config.valorNull;
        openGestor();
        try {
                falla=dao.afegirContenidor(nou);
                if (falla < 0 )throw new AfegirDAOException("Contenidor");
                //Actualització num
                this.numContenidors(1);
                
        }catch (HibernateException e){
                getLog().error("No s'ha pogut afegir el contenidor id:{}", nou.toString());
                throw new AfegirDAOException("No s'ha pogut afegir el contenidor id:"+nou.toString()) ;
            
        }catch (BuitException e){

                getLog().error("No s'ha pogut afegir el contenidor id:{}", nou.toString());
                throw new AfegirDAOException("No s'ha pogut afegir el contenidor id:"+nou.toString()) ;
        }catch (NullPointerException e){

                getLog().error("Afegir: Un dels valors indicats és null.{}",e.getLocalizedMessage());
                throw new AfegirDAOException("Afegir: Un dels valors indicats és null") ;
        }
        return falla;
    }


    public Long eliminarContenidor(Contenidor contenidor) throws  EliDAOException {
        Long id=Config.valorNull;
        openGestor();
        try {
            dao.eliminarContenidor(contenidor);

            //Actualització numContenidors
            this.numContenidors(-1);
            id=contenidor.getId();
        }catch (HibernateException e){
            
            getLog().error("Error de la bdd eliminant el contenidor, id:{}", Long.toString(contenidor.getId()));
            throw new EliDAOException("Error de la bdd eliminant el contenidor id:"+contenidor.getId());

        }catch (BuitException e){
            getLog().error("No hi ha sessio. Afegir contenidor id:{}", Long.toString(contenidor.getId()));
            throw new EliDAOException("No hi ha sessio. Eliminarcontenidor id:"+contenidor.getId());
        
        }catch (NullPointerException e){
            getLog().error("Eliminar: Un dels valors indicats és null.{}",e.getLocalizedMessage());
            throw new EliDAOException("Eliminar: Un dels valors indicats és null") ;
        }
        return id;
    }


    /**
     * Elimina un ítems d'un contenidor donat
     * @param item, element a eliminat
     * @param contenidor, d'on serà eliminat
     * @throws HibernateException
     * @throws BuitException
     */
    @SuppressWarnings("element-type-mismatch")
    public void treureItem(Long idItem, Long idContenidor) throws HibernateException, BuitException, EliDAOException{
            getLog().info("idContenidor: "+idContenidor);
            getLog().info("idItem: "+idItem);
            openGestor();
       // try {
            Boolean fet=false;
            //this.getLog().info("Classe: "+item.getClass().getSimpleName());
            try {
                //Es busca l'ítem
                GestorItems gi = GestorItems.getInstance();
                //14-12-11 Item it=gi.llegirItem(idItem);
                InterfaceItem it=gi.llegir(idItem);
                Contenidor con=this.llegirContenidor(idContenidor);
                fet=con.getItems().remove(it);
                if (! fet ){
                    getLog().error("No fet. No s'ha pogut eliminar l'ítem: "+it.getNom()+
                            " del contenidor :"+con.getNom());
                    throw new EliDAOException("No s'ha eliminat l'ítem ,id: "+
                            it.getId());
                }
                gi.tancar();
                it=null;
                con=null;

            }catch(ClassCastException e){
                getLog().error("1.- No s'ha pogut eliminar l'ítem. {}",e.getLocalizedMessage());
                throw new EliDAOException("Error eliminant l'ítem."+e.getLocalizedMessage());

            }catch(NullPointerException e){
                getLog().error("2.- No s'ha pogut eliminar l'ítem: {}",e.getLocalizedMessage());
                throw new EliDAOException("Error eliminant l'ítem."+e.getLocalizedMessage());

            }catch(UnsupportedOperationException  e){
                getLog().error("3.- No s'ha pogut eliminar l'ítem: {}",e.getLocalizedMessage());
                throw new EliDAOException("Error eliminant l'ítem."+e.getLocalizedMessage());
            
            }catch(LlegirDAOException  e){
                getLog().error("4.- No s'ha pogut eliminar l'ítem: {}",e.getLocalizedMessage());
                throw new EliDAOException("Error eliminant l'ítem."+e.getLocalizedMessage());
            }

    /*    }catch (HibernateException e){
            getLog().error("---------{}",e.getMessage());
            getLog().error("No s'ha pogut eliminar l'ítem, id: "+idItem+" del contenidor, id:"+idContenidor+".{}",e.getLocalizedMessage());
            throw new EliDAOException("No s'ha pogut eliminar l'ítem, id: "+idItem+" del contenidor, id :"+idContenidor);

        }catch (NullPointerException e){
                        getLog().error("---------{}",e.getMessage());
            getLog().error("No s'ha pogut eliminar l'ítem indicat, un dels valors indicats és null"+".{}",e.getLocalizedMessage());
            throw new EliDAOException("No s'ha pogut eliminar l'ítem indicat, un dels valors indicats és null"+".");

        }*/

    }

    public Contenidor modificar(Contenidor actual) throws ModDAOException  {
        Contenidor contenidor=new Contenidor();
        contenidor.setId(Config.valorNull);

        openGestor();
        try {

            dao.modificarContenidor(actual);
            contenidor=actual;
    
        }catch (HibernateException e){
          //  falla=-3L;
            String[] cadError={actual.getNom(),String.valueOf(actual.getId())};
            getLog().error("GC:modificar:Error de la bdd modificant el contenidor :{}. Amb id:{}", cadError);
            throw new ModDAOException("GC:modificar:Error de la bdd modificant el contenidor id:"+actual.getId());
            
        }catch (BuitException e){
           // falla=-31L;
            String[] cadError={actual.getNom(),String.valueOf(actual.getId())};
            getLog().error("GC:modificar:No s'ha pogut modificar el contenidor :{}.  Amb id:{}", cadError);
            throw new ModDAOException("GC:modificar:NO exiteix la sessio");
        }catch (NullPointerException e){

            getLog().error("GC:modificar: Un dels valors indicats és null.{}",e.getLocalizedMessage());
            throw new ModDAOException("GC:modificar: Un dels valors indicats és null") ;
        }
        return contenidor;
    }

    public Contenidor llegir(Long id) throws LlegirDAOException {
        return this.llegirContenidor(id);
    }
    public Contenidor llegirContenidor(Long id) throws LlegirDAOException {
        Contenidor contenidor=null;
        Contenidor  co=new Contenidor();
        co.setId(Config.valorNull);
        co.setNom(Config.valorNullStr);

        openGestor();
        try {
            contenidor = this.llegirContenidor(Contenidor.class, id);
            if (contenidor.getNom().equals(null)){
                throw new LlegirDAOException("GC:LlegirContenidor: contenidor "
                        +"amb id:"+id+" no exiteix. ");
            }else {
                co=contenidor;
            }

        } catch (LlegirDAOException ex) {
            throw ex;
        } catch (NullPointerException ex){
            throw new LlegirDAOException("GC:LlegirContenidor: contenidor null"
                    +ex.getLocalizedMessage());
        }
        return co;
    }


    //TODO:14-11-2011: Emili: Caldria modificar aquest mètode per què faci
    //      servir el mètode :public void modificarContenidor(Contenidor actual)
    public Contenidor llegirContenidor(Class classe,Long id) throws LlegirDAOException  {
        Contenidor  co=null;
        openGestor();

        try {
            //this.getLog().info("----------IdContenidorActual: "+id);
            //this.getLog().info("----------contenidor: "+classe.getSimpleName());
            co=dao.consultaContenidor(classe, id);
            //this.getLog().info("+++++++++++----------IdContenidorActual: "+id);
            //this.getLog().info("+++++++++++----------contenidor: "+co.toString());

        }catch (HibernateException e){
            getLog().error("Falla la connexió amb la bddd. Error en conèixer el nombre de contenidors." ,e.getLocalizedMessage());
            throw new LlegirDAOException("Llegir: Un dels valors indicats és null") ;

        }catch (NullPointerException e){
            getLog().error("El contenidor no existeix.",e.getLocalizedMessage());
            throw new LlegirDAOException("Llegir: Un dels valors indicats és null") ;

        }catch (BuitException e){
            getLog().error("No hi ha contenidors.{}",e.getLocalizedMessage());
             throw new LlegirDAOException("Llegir: Un dels valors indicats és null") ;
        }
     return co;
    }

    public Contenidor llegirContenidor(String nom) throws LlegirDAOException {
        Contenidor  co=null;
        InjeccioCodi filtre = new InjeccioCodi();
        openGestor();

        try {
            co=dao.consultaContenidor(filtre.netejar(nom));
        /*if (co==null){
            throw new NoExisteixException("No s'ha trobat el contenidor buscat amb nom: "+nom,this.getClass());
        }*/
        }catch (NullPointerException e){
            getLog().error("Un dels valors indicats és null.",e.getLocalizedMessage());
            throw new LlegirDAOException("Llegir: Un dels valors indicats és null") ;

        }catch (BuitException e){
            getLog().error("No tenim contenidor nom :{}",nom);
            throw new LlegirDAOException("Llegir: Un dels valors indicats és null") ;

        }catch (HibernateException e){
            getLog().error("Error a la base de dades cercant id:{}",nom);
            throw new LlegirDAOException("Llegir: Un dels valors indicats és null") ;
        }

        return co;
    }

    //Per implementar la interfície
    @Override
    public Iterator<Contenidor> llistat() throws LlistatDAOException{
        return this.llistatContenidors();
    }
    @Override
    public Iterator<Contenidor> llistat( int ini,int fi) throws LlistatDAOException{
        return this.llistatContenidors(ini, fi);
    }

    @Override
    public Iterator<Contenidor> llistat(String camp, String valor, int ini,int fi) throws LlistatDAOException{
        Iterator <Contenidor> it=null;
        openGestor();
        
        if ((valor.equals("") || valor==null)||
            (camp.isEmpty() ||camp==null)){
            it=this.llistatContenidors(ini, fi);
        }
        else {
            InjeccioCodi filtre =new InjeccioCodi();
            String cmp=filtre.netejar(camp);
            Object nom=filtre.netejar(valor);
            String comp=Config.valorNullStr;
            try {
                if (cmp.equalsIgnoreCase("datapub") ){
                    comp="<";

                    //La data és correcta ?
                    if (! filtre.comprovarData(nom.toString()))
                        throw new LogicException("La data indicada és errónia.");
                    else {
                        //Obtenim un objecte data.
                        //Si treballéssim amb integers també s'hauria de filtrar
                        SimpleDateFormat sdf = new SimpleDateFormat(Config.FORMAT_DATA);
                        sdf.setLenient(false);

                        nom=sdf.parse(nom.toString());
                    }
                }
                else if (cmp.equalsIgnoreCase("nom") ) comp="like";
                else throw new LogicException("no hi ha un valor de forma correcte");
                    
                it=dao.llista(cmp, comp, nom, ini, fi);

            } catch (HibernateException ex) {
                getLog().error("Error a la base de dades obtenint la llista de contenidors.{}",ex.getLocalizedMessage());
                throw new LlistatDAOException("Error a la base de dades obtenint la llista de contenidors");
            } catch (BuitException ex) {
                getLog().error("Llista sense contenidors. {}",ex.getLocalizedMessage());
                throw new LlistatDAOException("Llista sense contenidors");
            }catch (NullPointerException ex) {
                getLog().error("Hi ha valors buits.{}",ex.getLocalizedMessage());
                throw new LlistatDAOException("Hi ha valors buits");
            }catch (LogicException ex) {
                getLog().error("ERROR lògics: {}",ex.getLocalizedMessage());
                throw new LlistatDAOException("La cadena de cerca no està ben condtruida");
            }catch (ParseException ex) {
                getLog().error("ERROR de filtre: {}",ex.getLocalizedMessage());
                throw new LlistatDAOException("La data no s'ha pogut processar");
            }
        }
        return it;
    }

    public Iterator<Contenidor> llistatContenidors() throws LlistatDAOException{
        Iterator<Contenidor> it=null;
        openGestor();
        try {
            it= dao.llista();

        } catch (HibernateException ex) {
            getLog().error("Error a la base de dades obtenint la llista de contenidors.{}",ex.getLocalizedMessage());
            throw new LlistatDAOException("Error a la base de dades obtenint la llista de contenidors");
        } catch (BuitException ex) {
            getLog().error("Llista sense contenidors .",ex.getLocalizedMessage());
            throw new LlistatDAOException("Llista sense contenidors");
        }
        return it;
    }

    public Iterator<Contenidor> llistatContenidors(int ini, int fi) throws LlistatDAOException {
        Iterator<Contenidor> llista=null;
        openGestor();

      //  List<Contenidor> llistaAcotada=new LinkedList<Contenidor>();
        //Contenidor contenidor=null;
        try {
            //23 20:10 llista = this.llistatContenidors();
            llista = dao.llista(ini, fi);
            

        /*} catch (LlistatDAOException ex) {
            getLog().error(ex.getNomParam()+"entre els valors '"+ini+"' i '"+fi+"'");
            throw ex;*/

        } catch (BuitException ex) {
            getLog().error("llista buida de contenidors :{}",ex.getLocalizedMessage());
            throw new LlistatDAOException("Llista sense contenidors");

        }catch(HibernateException e){
            getLog().error("llistat amb errors d'hibernate ({})  ",e.getLocalizedMessage());
            throw new LlistatDAOException("error Hibernate: Llista sense contenidors");
        }
       /*23c 20:11 for (int i=0; (i<=fi)&&(llista.hasNext());i++){
            contenidor=llista.next();
            if (ini<=i ) {
                llistaAcotada.add(contenidor);
            }

        }*/

        //23 20:11 return llistaAcotada.iterator();
        return llista;
    }

    public Iterator<Contenidor> llistatContenidors(String ordre, int quants ) throws LlistatDAOException {
        Iterator<Contenidor> llistaAcotada=null;
        openGestor();

        try {
            llistaAcotada = dao.llista(ordre, quants);
        } catch (HibernateException ex) {
            getLog().error("Error obtenint la llista de valors amb quantitat :"+quants+".",ex.getLocalizedMessage());
            throw new LlistatDAOException("Error obtenint la llista de valors amb quantitat :"+quants);
        } catch (BuitException ex) {
            getLog().error("Error obtenint la llista de valors buida.",ex.getLocalizedMessage());
            throw new LlistatDAOException("Llista sense contenidors");
        }

        return llistaAcotada;
    }

    /**
     *
     * @return Nombre de contenidors del sistema
     */
    public int numContenidors() throws HibernateException,BuitException{
     
        openGestor();
        return this.num();
    }

    /**
     * Augmenta el nombre de contenidors en "augment" valor
     * @param augment
     * @return
     * @throws HibernateException
     * @throws BuitException
     */

    //Per implementar la interficie
    @Override
     public int num() throws HibernateException,BuitException{
         int nContenidors=Config.valorNullInt;
         openGestor();
         
        /*if (GestorContenidors.numContenidors.equals(Config.valorNullInt) ||
                (GestorContenidors.numContenidors <0)) {
         *
         */
            //Obtenim el valor d'ítems
            try{
                nContenidors=dao.quantsContenidors();
                if (nContenidors>0 ){
                    if (nContenidors!=GestorContenidors.numContenidors)
                        GestorContenidors.numContenidors=nContenidors;
                }else
                    throw new BuitException("Classe Contenidor, count="+String.valueOf(nContenidors));
            }catch (HibernateException e){
                    getLog().error("Falla la connexió amb la bddd. Error en conèixer el nombre de contenidors.{}",e.getLocalizedMessage());
                    throw e ;
            }catch (BuitException e){
                    getLog().error("No hi ha contenidors.{}",e.getLocalizedMessage());
                    throw e ;
            }
        //}
        return GestorContenidors.numContenidors;

    }

    /**
     *
     * @param nom
     * @return Retorna els nombre de contenidors que s'assemblen a nom
     * @throws HibernateException
     * @throws BuitException
     */
    @Override
    public int num(String nom ) throws HibernateException,BuitException{
        int nContenidors=Config.valorNullInt;
        openGestor();
        
        /*if (GestorContenidors.numContenidors.equals(Config.valorNullInt) ||
                (GestorContenidors.numContenidors <0)) {
         *
         */
            //Obtenim el valor d'ítems
            try{
                nContenidors=this.num("nom", "like", nom);
                if (nContenidors<0) throw new BuitException("Sense contenidors.");
            }catch (HibernateException e){
                    getLog().error("Falla la connexió amb la bddd. Error en conèixer el nombre de contenidors.{}",e.getLocalizedMessage());
                    throw e ;
            }catch (BuitException e){
                    getLog().error("No hi ha contenidors.{}",e.getLocalizedMessage());
                    throw e ;
            }
        //}
        //return GestorContenidors.numContenidors;
        return nContenidors;
    }

    private int num(String camp, String cmp, String valorCercat ) throws HibernateException,BuitException{
        int nContenidors=Config.valorNullInt;
        openGestor();
        /*if (GestorContenidors.numContenidors.equals(Config.valorNullInt) ||
                (GestorContenidors.numContenidors <0)) {
         *
         */
            //Obtenim el valor d'ítems
            try{
                nContenidors=dao.quantsContenidors(camp,cmp,valorCercat);
                //5-12-11 if (nContenidors>0)  GestorContenidors.numContenidors=nContenidors;
                if (nContenidors <0 )
                throw new BuitException("Classe Contenidor, counter="+String.valueOf(nContenidors));
            }catch (HibernateException e){
                    getLog().error("Falla la connexió amb la bddd. Error en conèixer el nombre de contenidors.{}",e.getLocalizedMessage());
                    throw e ;
            }catch (BuitException e){
                    getLog().error("No hi ha contenidors.{}",e.getLocalizedMessage());
                    throw e ;
            }catch (NullPointerException e){
                    getLog().error("Algun valor null.{}",e.getLocalizedMessage());
                    throw new BuitException("Algun valor null."+e.getLocalizedMessage()) ;
            }
        //}
        //5-1-11 return GestorContenidors.numContenidors;
        return nContenidors;
    }

    public int numContenidors(Integer augment) throws HibernateException,BuitException{
        openGestor();
        Integer nouValor=this.numContenidors();

        if (augment.equals(1)) nouValor++;
        else if (augment.equals(-1) && nouValor >0 ) nouValor--;

        GestorContenidors.numContenidors=nouValor;

        return GestorContenidors.numContenidors;
    }
 


    /*****************************************************
     *
     * TESTS
     * 
     *****************************************************/
    private void testNumContenidors(GestorContenidors gc){
        
        Eines.escriu("Num contenidors");
        Eines.escriu("===============");
        try {
            Eines.escriu(gc.numContenidors());
        } catch (HibernateException ex) {
            getLog().error("Error en obtenir el nombre conteidors.{}", ex.getLocalizedMessage());
        } catch (BuitException ex) {
            getLog().error("nombre de contenidors incorrecte. {}", ex.getLocalizedMessage());
        }

    }

    private void printLlistat(GestorContenidors gc){
        Iterator<Contenidor> it=null;

        try {
            
            it = gc.llistatContenidors();

        } catch (HibernateException ex) {
            this.getLog().error("Error hibernate.{}",ex.getLocalizedMessage());
        } catch (LlistatDAOException ex) {
            this.getLog().error("Error llsita buida.{}",ex.getLocalizedMessage());
        }

        Eines.escriu("-------llistat----------");
        while (it.hasNext()){
            Eines.escriu(it.next().toString());
        }
    }

    private void testllistaContenidors(GestorContenidors gc){

        Eines.escriu("Llistat dels 6 primers Contenidors per data");
        Eines.escriu("===========================================");

        try {
            Iterator it=gc.llistatContenidors(Config.ORDRE, 6);
            while (it.hasNext()){
                Contenidor c=(Contenidor)it.next();
                Eines.escriu(c);
            }

        } catch (HibernateException ex) {
            getLog().error("Error en obtenir la llista contenidors.{}", ex.getLocalizedMessage());
        } catch (LlistatDAOException ex) {
            getLog().error("llista buida de contenidors. {} ", ex.getLocalizedMessage());
        }

    }


    private void testCicle(GestorContenidors gc){

        try {
            Eines.escriu("Cicle de vida d'un contenidor");
            Eines.escriu("=============================");

            gc.printLlistat(gc);

            Eines.escriu("El primer contenidor es: " + gc.llegirContenidor(1L));
            Eines.escriu("nou contenidor");
            Eines.escriu("==============");
            Random r= new Random();
            Contenidor c= new Contenidor("emili".concat(Long.toString(r.nextInt(99999))));
            Long id=gc.afegir(c);
            c=gc.llegirContenidor(id);
            Eines.escriu("Cerca del nou contenidor amb id: " + id);
            Eines.escriu("nou contenidor amb id: " + c);
            gc.printLlistat(gc);

            //TODO:16:11:2011:Emili fer cerca per nom contenidor
            Eines.escriu("Cerca contenidor per nom,  " + gc.llegirContenidor(c.getNom()));



            Eines.escriu("contenidor NO eliminat per la reviso de la versio id: " + gc.eliminarContenidor(c));
            c=null;
            Contenidor c1=gc.llegirContenidor(id);
            Eines.escriu("contenidor eliminat id: " + gc.eliminarContenidor(c1));
            gc.printLlistat(gc);


        } catch (LlegirDAOException ex) {
            Logger.getLogger(GestorContenidors.class.getName()).log(Level.SEVERE, null, ex);
        } catch (EliDAOException ex) {
            Logger.getLogger(GestorContenidors.class.getName()).log(Level.SEVERE, null, ex);
        } catch (HibernateException ex) {
            this.getLog().error("Error hibernate");
        } catch (AfegirDAOException ex) {
                getLog().error("Error en afegir contenidor");
            }

    }


   /**************************************
    * MAIN
    */


   public static void main(String args[]){
        
        GestorContenidors gc=GestorContenidors.getInstance();
       // gc.testNumContenidors(gc);
        //gc.testllistaContenidors(gc);
        //gi.testmesVisita(gi);
          Iterator<Contenidor> lc;
        try {
            lc = (Iterator<Contenidor>)gc.llistat("nom", "con", 0, 37);
            while (lc.hasNext()){
            Contenidor c =lc.next();
            Eines.escriu(c.getNom());
        }


        } catch (HibernateException ex) {
            Logger.getLogger(ContenidorsDAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (LlistatDAOException ex) {
            Logger.getLogger(ContenidorsDAO.class.getName()).log(Level.SEVERE, null, ex);
        }


        //gc.testCicle(gc);
        gc.tancar();


    }

}
